home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2005 June (DVD) / DPPRO0605DVD.iso / Install / program files / Borland / BDS / 3.0 / Demos / Delphi.Net / VCL / Lexer / LexSampleU.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2004-10-22  |  3.4 KB  |  152 lines

  1. unit LexSampleU;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils,
  7.   Windows,
  8.   Messages,
  9.   Classes,
  10.   Graphics,
  11.   Controls,
  12.   Forms,
  13.   Dialogs,
  14.   Buttons,
  15.   ExtCtrls,
  16.   StdCtrls,
  17.   Menus,
  18. {$IFDEF CLR}
  19.   System.Data,
  20.   System.Windows.Forms,
  21.   System.Text,
  22.   System.ComponentModel,
  23. {$ENDIF}
  24. {$IFDEF MSWINDOWS}
  25.   mwStringStream,
  26. {$ENDIF}
  27.   mwDelphiLanguageElements,
  28.   mwDelphiParser,
  29.   mwIdToString;
  30.  
  31. type
  32.   TLexSampleForm = class(TForm)
  33.     SamplePanel: TPanel;
  34.     btnPerformance: TButton;
  35.     btnTokenSample: TButton;
  36.     SampleMemo: TMemo;
  37.     OpenDialog1: TOpenDialog;
  38.     procedure btnPerformanceClick(Sender: TObject);
  39.     procedure btnTokenSampleClick(Sender: TObject);
  40.   private
  41.     Stream: TMemoryStream;
  42.     Parser: TmwDelphiParser;
  43.     Start, Stop, Frequency: TLargeInteger;
  44.     Elapsed: Extended;
  45.   public
  46.     { Public declarations }
  47.   end;
  48.  
  49.   TmwString = array of AnsiChar;
  50. var
  51.   LexSampleForm: TLexSampleForm;
  52.  
  53. implementation
  54.  
  55. {$R *.dfm}
  56.  
  57. procedure TLexSampleForm.btnPerformanceClick(Sender: TObject);
  58. begin
  59.   if OpenDialog1.Execute then
  60.   begin
  61.     Stream := TMemoryStream.Create;
  62.     Parser := TmwDelphiParser.Create;
  63.     Stream.LoadFromFile(OpenDialog1.FileName);
  64. {$IFDEF CLR}
  65.     Parser.SetBuf(TmwString(Stream.Memory));
  66. {$ELSE}
  67.     Parser.SetBuf(Stream.Memory, Stream.Size);
  68. {$ENDIF}
  69.     QueryPerformanceFrequency(Frequency);
  70.     QueryPerformanceCounter(Start);
  71.     while Parser.Id <> leAtEnd do
  72.     Parser.NextToken;
  73.     QueryPerformanceCounter(Stop);
  74.     Elapsed := (Stop - Start) / Frequency;
  75.     Caption := FloatToStr(Elapsed);
  76.     Stream.Free;
  77.     Parser.Free;
  78.   end;
  79. end;
  80.  
  81. procedure TLexSampleForm.btnTokenSampleClick(Sender: TObject);
  82. var
  83. {$IFDEF CLR}
  84.   OutBuf: StringBuilder;
  85. {$ELSE}
  86.   OutBuf: TmwStringStream;
  87. {$ENDIF}
  88.   NrString, TokenStr, IdStr, Space, LE: string;
  89. begin
  90.   if OpenDialog1.Execute then
  91.   begin
  92.     Stream := TMemoryStream.Create;
  93.     Parser := TmwDelphiParser.Create;
  94.     LE := #13#10;
  95.     Space := '   ';
  96.     Stream.LoadFromFile(OpenDialog1.FileName);
  97. {$IFDEF CLR}
  98.     OutBuf := StringBuilder.Create(Stream.Size * 4);
  99.     Parser.SetBuf(TmwString(Stream.Memory));
  100. {$ELSE}
  101.     OutBuf := TmwStringStream.Create('');
  102.     Parser.SetBuf(Stream.Memory, Stream.Size);
  103. {$ENDIF}
  104.     Stream.LoadFromFile(OpenDialog1.FileName);
  105.     while Parser.Id <> leAtEnd do
  106.     begin
  107.       NrString := IntToStr(Parser.LineNumber) + '   ';
  108. {$IFDEF CLR}
  109.       TokenStr := Parser.WideToken;
  110. {$ELSE}
  111.       TokenStr := Parser.Token;
  112. {$ENDIF}
  113.       if Parser.Id = leIdentifier then
  114.       begin
  115.         if Parser.ExId <> leUnknown then
  116.           IdStr := IdToString(Parser.ExId)
  117.         else
  118.           IdStr := IdToString(Parser.Id);
  119.       end else IdStr := IdToString(Parser.Id);
  120. {$IFDEF CLR}
  121.       OutBuf.Append(LE);
  122.       OutBuf.Append(NrString);
  123.       OutBuf.Append(TokenStr);
  124.       OutBuf.Append(Space);
  125.       OutBuf.Append(IdStr);
  126. {$ELSE}
  127.       OutBuf.WriteString(LE);
  128.       OutBuf.WriteString(NrString);
  129.       OutBuf.WriteString(TokenStr);
  130.       OutBuf.WriteString(Space);
  131.       OutBuf.WriteString(IdStr);
  132. {$ENDIF}
  133.       Parser.NextToken;
  134.     end;
  135.     Caption := '';
  136.     SampleMemo.Lines.BeginUpdate;
  137.     SampleMemo.Clear;
  138. {$IFDEF CLR}
  139.     SampleMemo.Text := OutBuf.ToString;
  140. {$ELSE}
  141.     SampleMemo.Text := OutBuf.DataString;
  142. {$ENDIF}
  143.     SampleMemo.Lines.EndUpdate;
  144.     Stream.Free;
  145.     Parser.Free;
  146.     OutBuf.Free;
  147.   end;
  148. end;
  149.  
  150. end.
  151.  
  152.